import errorCode from "@/constants/errorCode";
import config from 'config/env';
import {
	getToken
} from '@/utils/auth';
import {
	toLoginUrl
} from '@/utils/index';
import store from '@/store';
const myRequest = (options) => { //暴露一个function：myRequest，使用options接收页面传过来的参数
	return new Promise((resolve, reject) => { //异步封装接口，使用Promise处理异步请求
		// if (options.showLoading) {
		// 	uni.showLoading({
		// 		title: '加载中'
		// 	});
		// }
		let url = options.url;

		//#ifndef H5 
		url = config.basePath + options.url
		//#endif
		uni.request({ //发送请求
			url: url, //接收请求的API
			method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
			header: {
				// "forward-to-service" : '192.168.2.188',
				// "ngrok-skip-browser-warning": "69420",
				'hx-token': getToken(), // 请求token
				//#ifdef MP-WEIXIN
				'client-type': 'WX_MA', //客户端微信小程序
				'app-id': uni.getAccountInfoSync().miniProgram.appId, //小程序appId
				'tenant-id': config.tenantId,
				// 'app-id': 'wxaa5d62d383650ace', //小程序appId
				//#endif
				//#ifdef APP-PLUS
				'client-type': 'APP', //客户端类型APP
				'tenant-id': config.tenantId,
				//#endif
				//#ifdef H5
				'client-type': 'H5', //客户端H5
				'tenant-id': config.tenantId,
				//#endif
				//#ifdef MP-ALIPAY
				'client-type': 'ALI_MA', //客户端支付宝小程序
				'app-id': config.aliAppId, //小程序appId
				'tenant-id': config.tenantId,
				//#endif
				//#ifdef MP-TOUTIAO
				'client-type': 'APP', //客户端类型APP
				'tenant-id': config.tenantId,
				//#endif

			},
			data: options.data || {}, //接收请求的data,不传默认为空
			//接口请求成功
			success: async (res) => {
				const status = Number(res.statusCode) || 200
				const message = res.data.msg || errorCode[status] || errorCode['default']
				// if (status != 200 || res.data.code == -1) {
				// 	uni.$emit('z-paging-error-emit');
				// 	uni.showModal({
				// 		title: '提示',
				// 		content: '1231321',
				// 		success() {}
				// 	});
				// 	reject(new Error(message));
				// }
				if (status !== 200) {
					uni.$emit('z-paging-error-emit');
					// uni.showModal({
					// 	title: '提示',
					// 	content: message,
					// 	success() {}
					// });
					reject(new Error(message));
				}
				if (res.data.code === -1) {
					store.commit('SET_ERROR_MESSAGE', message)
					// console.log(store.getters.errorMessage)
					// reject(new Error(message));
					console.log(message)
				}
				
				if (res.data.code === 50001 || res.data.msg === '用户不存在') {
					// uni.showModal({
					// 	title: '提示',
					// 	content: message,
					// 	success() {}SET_ERROR_USERNAME
					// });
					store.commit('SET_ERROR_USERNAME', message)
					// console.log(store.getters)
					reject(new Error(message));
				}
				
				
				// token为空或token过期
				if (res.data.code === 40001 || res.data.code === 40002) {
					if (!getApp().globalData.isLoading) {
						getApp().globalData.isLoading = true;
						// #ifdef MP
						// 静默登录
						await store.dispatch("BeforeLogin").then(() => {
							var pages = getCurrentPages(); // 获取页面栈
							var currPage = pages[pages.length - 1]; // 当前页面
							currPage.onLoad(currPage.options)
						})
						getApp().globalData.isLoading = false;
						// #endif
						// #ifndef MP
						// 跳转登录
						await toLoginUrl();
						getApp().globalData.isLoading = false;
						// #endif

					}

					reject(new Error("token为空或token过期"));
				} else if (res.data.code === 40003) { // 强制跳转登录
					if (!getApp().globalData.isLoading) {
						getApp().globalData.isLoading = true;
						// 跳转登录
						await toLoginUrl();
						getApp().globalData.isLoading = false;
					}

					reject(new Error("请登录"));
				}
				resolve(res.data) //成功,将数据返回
			},
			fail: (err) => { //失败操作
				uni.$emit('z-paging-error-emit');
				uni.showModal({
					title: '提示',
					content: '接口请求出错：' + err.errMsg
				});
				reject(err)
			},
			complete(res) {
				// if (options.showLoading) {
				// 	uni.hideLoading();
				// }
			}
		})
	})
}

module.exports = {
	myRequest
}
